import fetch from 'node-fetch'

/** 返回节日数量，默认3 */
const n = 3

const url = 'https://holiday.iloli.work/'
//感谢Jiaozi提供的API，节日不准确请反馈至Jiaozi
export class example extends plugin {
    constructor() {
        super({
            name: '最近节日查询',
            dsc: '查询最近的几个节日',
            event: 'message',
            priority: 1,
            rule: [{
                reg: /^(#|\/)?节日查询$/,
                fnc: 'recentHolidays'
            }]
        });
    }

    async recentHolidays(e) {
        try {
            const RHD = await getNearestHolidays(n);
            const isQQBot = (e.bot?.adapter?.name || e.platform || '未知') === 'QQBot';
            
            let festivalText;
            if (isQQBot) {
                // QQBot平台使用Markdown格式
                festivalText = RHD.map((festival) => {
                    return `\n\n##${festival.name}\n\n> 日期: ${festival.date}\n还有 ${festival.days} 天\n`;
                }).join('\n');
                
                return e.reply([
                    `\n\n#🗓最近的${n}个节日\n---\n` + festivalText,
                    `\n`,
                    segment.button([
                        { text: '再看一次', callback: '/节日查询' }
                    ])
                ]);
            } else {
                // 其他平台使用普通文本格式
                festivalText = RHD.map((festival) => {
                    return `\n${festival.name}\n日期: ${festival.date}\n还有 ${festival.days} 天\n`;
                }).join('\n');
                
                return e.reply([
                    `\n🗓最近的${n}个节日\n==================\n` + festivalText,
                    `\n`
                ]);
            }
        } catch (error) {
            console.error('获取节日信息失败:', error);
            return e.reply(['获取节日信息失败，请稍后再试']);
        }
    }
}

async function getNearestHolidays(numHolidays = n) {
    try {
        const response = await fetch(url);
        const data = await response.json();
        
        if (!data.countdowns || !data.countdowns.undefined) {
            throw new Error('API返回数据格式错误');
        }
        
        // 新的API结构中，节日数据存储在countdowns.undefined数组中
        const holidays = data.countdowns.undefined;
        
        if (!Array.isArray(holidays)) {
            throw new Error('API返回的节日数据格式错误');
        }
        
        // 排除节气类型的节日
        const excludedNames = [
            '芒种', '夏至', '小暑', '大暑', '立秋', '处暑', '白露', 
            '秋分', '寒露', '霜降', '立冬', '小雪', '大雪', '冬至', 
            '立春', '雨水', '惊蛰', '春分', '清明', '谷雨', '立夏', '小满'
        ];
        
        // 过滤掉二十四节气和周末
        const filteredHolidays = holidays.filter(holiday => 
            !excludedNames.includes(holiday.name) && holiday.name !== '周末'
        );
        
        // 按剩余天数排序
        filteredHolidays.sort((a, b) => a.days - b.days);
        
        // 返回最近的n个节日
        return filteredHolidays.slice(0, numHolidays);
    } catch (error) {
        console.error('获取节日数据失败:', error);
        throw error;
    }
}